package jcpcotizaciones.Control;

import java.util.List;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.LinkedList;
import jcpcotizaciones.Modelo.Cliente;

/**
 * Darwin Silva Vargas
 * Viviana Figueroa Barros
 * Carlos Manota Mejía
 * Elkin Cedeño
 */

public class ControlCliente {
    private static List cliente;
    private static Connection con;

public static void agregarClientes (Cliente c) throws SQLException, Exception{
    ManejadorBaseDatos mbd= ManejadorBaseDatos.getInstancia();
    mbd.conectar();
    con=mbd.getConexion();
    if (con == null ){
      throw new SQLException(" No hay conexion ");
    }
    PreparedStatement pst = null;
    try {
      pst = con.prepareStatement("Insert Into cliente values(?,?,?,?,?,?)");
      pst.setString(1,c.getCodigo());
      pst.setString(2,c.getCedula());
      pst.setString(3,c.getNombre());
      pst.setString(4,c.getDireccion());
      pst.setString(5,c.getTelefono());
      pst.setString(6,c.getEmail());
      pst.executeUpdate();
    }finally {
        if (pst != null) {
             pst.close();
        }
    }
}

public static Cliente BuscarCliente(String cod) throws SQLException{
         ResultSet rs = null;
         PreparedStatement pst = null;
         Cliente cli = null;
     try {
         ManejadorBaseDatos mbd=ManejadorBaseDatos.getInstancia();
         mbd.conectar();
         con=mbd.getConexion();
         pst = con.prepareStatement("select * from cliente where codcliente = ?");
         pst.setString(1, cod);
         rs = pst.executeQuery();
         while(rs.next()) {
             cli = Cliente.load(rs);
         }
    } finally {
         if (rs != null) {
            rs.close();
         }
         if (pst != null) {
           pst.close();
         }
          return cli;
    }
}

public static Cliente BuscarClienteCed(String ced) throws SQLException{
         if (ced == null) {
          throw new SQLException("No hay elemento clave de la clase cliente");
        }
         ResultSet rs = null;
         PreparedStatement pst = null;
         Cliente cli = null;
     try {
         ManejadorBaseDatos mbd=ManejadorBaseDatos.getInstancia();
         mbd.conectar();
         con=mbd.getConexion();
         pst = con.prepareStatement("select * from cliente where cedula = ?");
         pst.setString(1, ced.trim());

         rs = pst.executeQuery();
         while(rs.next()) {
             cli = Cliente.load(rs);
         }
     } finally {
         if (rs != null) {
            rs.close();
         }
         if (pst != null) {
           pst.close();
         }
          return cli;
    }
}

public static Cliente BuscarClienteNom(String nom) throws SQLException{
    if (nom == null) {
      throw new SQLException("No hay elemento clave de la clase cliente");
    }
     ResultSet rs = null;
     PreparedStatement pst = null;
     Cliente cli = null;
     try {
         ManejadorBaseDatos mbd=ManejadorBaseDatos.getInstancia();
         mbd.conectar();
         con=mbd.getConexion();
         pst = con.prepareStatement("select * from cliente where nombre = ?");
         pst.setString(1, nom.trim());
         rs = pst.executeQuery();
         while(rs.next()) {
             cli = Cliente.load(rs);
         }
     } finally {
         if (rs != null) {
            rs.close();
         }
         if (pst != null) {
           pst.close();
         }
          return cli;
    }
}

public static boolean ModificarCliente(Cliente c, String cod) throws SQLException, Exception{
    if ( BuscarCliente(cod) == null) {
      throw new SQLException ("Cliente no registrado ");
    }
    PreparedStatement pst = null;
    boolean res=false;
    try {
     ManejadorBaseDatos mbd=ManejadorBaseDatos.getInstancia();
     mbd.conectar();
     con=mbd.getConexion();
     pst = con.prepareStatement("Update cliente set codcliente = ?, cedula = ?, nombre = ?, direccion = ?, telefono = ?, email = ? where codcliente = ?" );
        pst.setString(1,c.getCodigo());
        pst.setString(2,c.getCedula());
        pst.setString(3,c.getNombre());
        pst.setString(4,c.getDireccion());
        pst.setString(5,c.getTelefono());
        pst.setString(6,c.getEmail());
        pst.setString(7,cod);
     int r= pst.executeUpdate();
     if (r != 0) {
      res = true;
    }
    } finally {
      if (pst != null) {
        pst.close();
      }
    }
    return res;
}

 public static void EliminarCliente(String cod) throws SQLException, Exception{
     if (BuscarCliente(cod) == null) {
        throw new SQLException("No hay elemento clave de la clase cliente");
     }
     PreparedStatement pst = null;
     try {
        ManejadorBaseDatos mbd=ManejadorBaseDatos.getInstancia();
        mbd.conectar();
        con=mbd.getConexion();
        pst = con.prepareStatement("delete from cliente where codcliente = ?");
        pst.setString(1, cod);
        pst.executeUpdate();

     } finally {
        if (pst != null) {
           pst.close();
        }
     }
}

public static void listarClientes() throws SQLException, Exception {
     ResultSet rs = null;
     PreparedStatement pst = null;
     cliente = new LinkedList();
     try {
         ManejadorBaseDatos mbd=ManejadorBaseDatos.getInstancia();
         mbd.conectar();
         con=mbd.getConexion();
        pst = con.prepareStatement("select * from cliente ");
        rs = pst.executeQuery();
        while(rs.next()) {
           cliente.add(Cliente.load(rs));
        }
     } finally {
        if (rs != null) {
           rs.close();
       }
        if (pst != null) {
          pst.close();
       }
    }
}

public static List getCliente(){
    return cliente;
}

public static void setClientes (List aCliente){
    cliente = aCliente;
}
}
